package com.hsyt.pfc.redis;

import org.springframework.data.redis.core.RedisTemplate;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @Description:
 * @ClassName: RedisSerialNoHandler
 * @Package: com.hsyt.pfc.redis
 * @Author: wangze@hsyuntai.com
 * @Date: 2018年10月30日 10:01
 * @Copyright: 版权归 HSYUNTAI 所有
 */
public class RedisSerialNoHandler {

    private static final String SERIAL_NUMBER = "serialNo:";
    private static final String SERIAL_NUMBER_DAY = "serialNo:day:";
    public final static String FORMAT_yyyyMMdd = "yyyyMMdd";

    private static RedisTemplate redisTemplate;

    public RedisSerialNoHandler(RedisTemplate redisTemplate) {
        if (redisTemplate == null) {
            throw new IllegalArgumentException("RedisSerialNoHandler instances require a redisTemplate");
        }
        RedisSerialNoHandler.redisTemplate = redisTemplate;
    }

    /**
     * 按天生成序列号 bizCode + yyyyMMdd + 10位
     * 例如： YL201810300000000100
     *
     * @return
     */
    public static String generateOfDay(String bizCode) {
        String key =  bizCode + new SimpleDateFormat(FORMAT_yyyyMMdd).format(new Date());
        Long result = redisTemplate.opsForValue().increment(SERIAL_NUMBER_DAY +key, 1L);
        return key + String.format("%010d", result);
    }

    /**
     * 按系统业务生成序列号 bizCode + 12位自定义自增码
     *
     * @return
     */
    public static String generate(String bizCode) {
        Long result = redisTemplate.opsForValue().increment(SERIAL_NUMBER + bizCode, 1L);
        return bizCode + String.format("%012d", result);
    }

}
